/**
 * 生成提交表单处理函数的工具函数
 *
 * @param {() => Promise<boolean>} beforeSubmit 在提交表单之前执行的函数，返回 true 表示继续提交表单，返回
 * false 表示取消提交表单
 * @param {() => Promise<any>} handleSubmit 处理表单的提交
 * @param {(res: any) => Promise<void>} afterSubmit 在提交表单之后执行的函数，该函数接收处理表单提交的返回值作
 * 为参数
 * @param {(e: any) => void} error 出错时的处理函数，该函数接收出错信息作为参数
 * @returns {[Ref<boolean>, () => Promise<void>]} 返回一个数组，包含以下两个元素：
 * - 表单是否正在提交的响应式状态
 * - 提交表单的处理函数
 */
export const genSubmitFormHandler = ({
  beforeSubmit,
  handleSubmit,
  afterSubmit,
  error
}: {
  beforeSubmit?: () => Promise<boolean>
  handleSubmit: () => Promise<any>
  afterSubmit?: (res: any) => Promise<void>
  error?: (e: any) => void
}): [Ref<boolean>, () => Promise<void>] =>
  ServiceUtil.genSubmitFormHandler({
    beforeSubmit,
    handleSubmit,
    afterSubmit,
    error,
    handleHandler: (handler) => FunUtil.throttleByLimit(handler)
  })
